package demo01;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/*
 *  java.lang.Throwable类：Java语言中所有错误或异常的超类
 *      Exception：编译期异常，进行编译时（写代码时会提示）java程序出现的问题
 *          RuntimeException：运行期异常，java程序运行过程中出现的问题
 *          异常：相当于程序出现了一个小问题，可以把异常处理掉，程序可以继续运行
 *      Error：错误
 *          错误：相当于程序出现了一个无法治愈的毛病，必须修改源代码，程序才能继续运行
 */
public class Demo01Exception {
    public static void main(String[] args) throws ParseException { // 使用throws就可以声明异常，将已知异常标识出来并交给调用者处理
        /*
         *  Exception：异常，分为编译期异常 / 运行期异常
         */
        // 编译期异常
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date = simpleDateFormat.parse("1999-1212"); // ParseException解析异常，异常处理方式1：声明异常throws

        // 运行期异常
        int[] arr = {1, 2, 3};
        try {
            int a = arr[3]; // ArrayIndexOutOfBoundsException数组下标越界异常，异常处理方式2：try...catch
        } catch(Exception exception) {
            exception.printStackTrace(); // 打印错误信息
        } // 使用try...catch就可以处理异常，并且后续代码可以正常运行
        System.out.println("后续代码可正常运行...");

        /*
         *  Error：错误
         */
        int[] arr2 = new int[1024 * 1024 * 1024]; // OutOfMemoryError内存溢出错误，不可处理，只能修改源代码！
    }
}
